// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false
// 引入elementui
import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

//在main.js引入qs  
import qs from  'qs'  

//配全局属性配置，在任意组件内可以使用this.$qs获取qs对象 
Vue.prototype.$qs = qs

// 使用elementui
Vue.use(ElementUI)

Vue.config.productionTip = false

//引入echarts插件
import echarts from 'echarts'
Vue.prototype.$echarts = echarts


//引入 axios
//var axios=require("axios") 在0.27.2中可用，到1.1.2中有问题，不知道后面版本情况
//如果不起作用改用
import axios from 'axios'
//指定axios引用的根路径
axios.defaults.baseURL="http://localhost:8080/mes-boot/"

axios.defaults.retry = 3 // 请求重试次数
axios.defaults.retryDelay = 1000 // 请求重试时间间隔
axios.defaults.shouldRetry = true // 是否重试

//添加请求拦截器
axios.interceptors.request.use(
  config => {
      //添加header
      //config.headers['Content-Type'] = 'application/json'
      config.headers['Accept-Language'] = 'zh-CN'
      config.headers['Authorization'] = sessionStorage.getItem('authorization') // 可以全局设置接口请求header中带token

      if (config.method === 'post') {
          if (!config.data) { // 没有参数时，config.data为null，需要转下类型
              config.data = {}
          }
          // config.data = JSON.stringify(config.data) // qs序列化参数
      }     
      return config
  },
  err => {
      //Promise.reject()方法返回一个带有拒绝原因的Promise对象，在F12的console中显示报错
      Promise.reject(err)
  }
);

//添加影响拦截器
axios.interceptors.response.use(res => {
  // 对响应数据做些什么   
  switch (res.data.code) {
    case 60000:
    case 60001:
      ElementUI.Message.error(res.data.message);
      router.replace("/");
    case 40300:
      ElementUI.Message.error(res.data.message);
  }

  return res
},
err => {
  // 对响应错误做些什么
  console.log('err', err.res) // 修改后
  return Promise.reject(err)
})

//接着将axios改写为vue的原型属性，之后可以在其他组件中使用`this.$axios`发生数据调用
Vue.prototype.$axios=axios

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
